package com.sync.syncmasterdata.customer.service.convert;

import com.sync.syncmasterdata.customer.pojo.CrmCustomer;
import com.sync.syncmasterdata.customer.pojo.U8Customer;
import com.sync.syncmasterdata.customer.service.impl.CPServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.json.JSONArray;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Map;
import java.util.Objects;

import static com.sync.syncmasterdata.util.NormalUtil.*;

/**
 * crm 对象 转 u8
 * crm 对象 prod 操作类别 add  edit
 */
@Service
@Slf4j
public class CrmToU8 {
    @Autowired
    private CPServiceImpl cpService;

    public U8Customer convertFun(CrmCustomer cus, String prod) {
        //获取crm的字典
        Map<String, JSONObject> priMap = cpService.getAreaMap(new JSONArray()).get("crm");

        if (priMap.size() < 1) {
            log.info("crmToU8转换：地址map为空-请检查请求权限");
            return null;
        }

        String sort_code = getMapValue(priMap, cus.getNew_city()) == null ? "" : getMapValue(priMap, cus.getNew_city()).get("u8id").toString();
        //省
        String sheng = getMapValue(priMap, cus.getNew_province()) == null ? "" : getMapValue(priMap, cus.getNew_province()).get("new_area").toString();
        //市
        String shi = getMapValue(priMap, cus.getNew_city()) == null ? "" : getMapValue(priMap, cus.getNew_city()).get("new_area").toString();
        U8Customer uc = new U8Customer();
        //只使用crm中的客户名称（简称保持一致）20220601修改
        uc.setName(cus.getName());
        uc.setAbbrname(cus.getName());
        //u8所属地区 crm 省份互转 转换 和分类公用一个变量
        uc.setDomain_code(sort_code);
        //u8所属分类 crm货币城市互转 转换
        uc.setSort_code(sort_code);
        //货币 转换
        uc.setCcusexch_name(cus.getTransactioncurrencyid());
        //客户管理类型 转换
        uc.setCcusmngtypecode(cusType2U8type(cus.getNew_type()));
        //国内 固定
        uc.setBcusdomestic(prod.equals("edit")?null:1);
        //服务 固定
        uc.setBserviceattribute(prod.equals("edit")?null:0);
        //国外 固定
        uc.setBcusoverseas(prod.equals("edit")?null:0);
        //零售 固定
        uc.setBshop(prod.equals("edit")?null:0);
        //是否有资质 转换
        uc.setSelf_define2(cusZZ2U8ZZ(cus.getNew_account()));
        //省份 自定义字段 中文 转换
        uc.setSelf_define3(sheng);
        //城市 自定义字段 中文 转换
        uc.setSelf_define6(shi);

        //guid
        uc.setSelf_define7(cus.getAccountid());
        uc.setSelf_define8(cus.getNew_num());

        //停用时间 转换
        uc.setEnd_date(cusStop2U8Stop(cus.getStatecode()));

        //发展时间
        uc.setSeed_date(prod.equals("add") ? getNowData() : null);
        //赋值code，如果是edit code=guid，如果是add code=null
        uc.setCode(prod.equals("edit") ? cus.getNew_erp_num() : null);
        uc.setMemo(prod.equals("edit") ? null : "crm新增推送");
        return uc;

    }

    /**
     * 截取字符串最后两个字符 (城市)
     *
     * @param _in
     * @return
     */
    private String cutIntLast2(String _in) {
        try {
            String inStr = String.valueOf(_in);
            String returnStr = inStr.substring(0, inStr.length() - 2);
            return returnStr;
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }

    /**
     * 截取字符串最后4个字符(省)
     *
     * @param _in
     * @return
     */
    private String cutIntLast4(String _in) {
        try {
            String inStr = String.valueOf(_in);
            String returnStr = inStr.substring(0, inStr.length() - 4);
            return returnStr;
        } catch (Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }

    /**
     * crm 客户管理转U8
     *
     * @param _in
     * @return
     */
    private String cusType2U8type(Integer _in) {
        if (Objects.isNull(_in)) {
            return "06";
        }
        switch (_in) {
            case 1:
                return "01";
            case 5:
                return "05";
            case 4:
                return "02";
            case 2:
                return "07";
            case 3:
                return "14";
            default:
                return "06";
        }
    }

    /**
     * crm u8 资质转换
     *
     * @param _in
     * @return
     */
    private String cusZZ2U8ZZ(Integer _in) {
        if (Objects.isNull(_in)) {
            return "否";
        }
        switch (_in) {
            case 1:
                return "否";
            case 2:
                return "否";
            case 3:
                return "是";
            default:
                return "否";
        }
    }

    /**
     * crm u8 停用时间转换
     *
     * @param _in
     * @return
     */
    private String cusStop2U8Stop(Integer _in) {
        if (Objects.isNull(_in)) {
            return null;
        }
        if (_in == 0) {
            return null;
        } else if (_in == 1) {
            return getNowData();
        } else {
            return null;
        }
    }
}
